/*
 *  提供各种频率的心跳回调,用于各种动画
 */
#ifndef _SYS_HEART_H_
#define _SYS_HEART_H_

#include <stdint.h>
#include <stdbool.h>

//最小心跳间隔us,SysHeartType中的心跳都为该值的整数倍
#define SYS_HEART_MIN_INTERVAL 100000

//心跳类型,延时间隔为 SYS_HEART_MIN_INTERVAL x N
typedef enum {
    SYS_HERAT_TYPE_SLOW = 0, // x5
    SYS_HERAT_TYPE_NORMAL,   // x2
    SYS_HERAT_TYPE_FAST,     // x1

    SYS_HERAT_TYPE_MAP_ANIM, // x5,5,5 地图动画
    
    SYS_HERAT_TYPE_UNIT_STANDBY, // x5,1,5 单元待机动画
    SYS_HERAT_TYPE_UNIT_SELECT,  // x5,1,5 单元选中动画
    SYS_HERAT_TYPE_UNIT_RUNNING, // x1,1,1,1 单元跑动动画
    
    SYS_HERAT_TYPE_TOTAL,
} SysHeartType;

//心跳回调,index从0数起,用于指导多段变频动画的帧切换
//返回: 0/正常,大于0/回调结束后调用一次刷屏,不要返回负数
typedef int32_t (*SysHeartCallback)(void* priv, SysHeartType type, int32_t index);

typedef struct {
    SysHeartType type;
    void* priv;
    SysHeartCallback callback;
} SysHeartUser;

SysHeartUser* SysHeartRegister(void *priv, SysHeartCallback callback, SysHeartType type);
int32_t SysHeartUnRegister(SysHeartUser* usr);
int32_t SysHeartSwitch(SysHeartUser* usr, SysHeartType type);
int32_t SysHeartRefresh();

#endif // _SYS_HEART_H_
